package com.fzu.express.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.fzu.express.entity.Order;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fzu.express.entity.WebUser;
import com.fzu.express.pojo.DashboardVO;
import com.fzu.express.pojo.OrderDetail;
import com.fzu.express.utils.PageVO;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zyq
 * @since 2022-10-27
 */
public interface OrderService extends IService<Order> {

    /**
     * 根据条件获取分页列表
     * @param order 参数
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @param identityCondition 是否添加身份条件
     * @return page
     */
    PageVO listOrder(Order order, WebUser user, Integer pageNum, Integer pageSize, boolean identityCondition);

    /**
     * 添加订单
     * @param order 参数
     */
    void addOrder(Order order);

    /**
     * 修改订单
     * @param order 参数
     */
    void updateOrder(Order order);

    /**
     * 根据ID删除订单
     * @param id 订单ID
     */
    void deleteOrder(Long id);

    /**
     * 获取订单详情
     * @param id 订单ID
     * @return OrderDetail
     */
    OrderDetail getOrderDetail(Long id);

    /**
     * 订单操作
     * @param order
     * @param user
     */
    void operate(Order order, WebUser user);

    /**
     * 获取数据大屏数据
     * @param user 当前登录用户
     * @return
     */
    DashboardVO dashboard(WebUser user);

    /**
     * 拒收快递
     * @param id
     * @param user
     */
    void refuse(Long id, WebUser user);

    /**
     * 订单列表快递员使用
     * @param order
     * @param user
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageVO listOrderByCourier(Order order, WebUser user, Integer pageNum, Integer pageSize);

    /**
     * 批量执行订单操作
     * @param status
     * @param user
     * @return 操作的订单数
     */
    Long batchOperate(Integer status, WebUser user);
}
